package cqrtplm.adapter;

import com.hustcad.plm.pdm.caddoc.model.vo.MDAImportOutDocVo;
import com.hustcad.plm.pdm.common.model.vo.BusinessObjectVO;
import com.hustcad.plm.pdm.container.model.dto.Product;
import com.hustcad.plm.pdm.doc.dto.SaveDocDTO;
import com.hustcad.plm.pdm.doc.vo.DocumentVO;
import com.hustcad.plm.pdm.file.model.dto.ContentUploadDTO;
import com.hustcad.plm.pdm.file.model.dto.FileGroupDTO;
import com.hustcad.plm.pdm.folder.model.vo.SubfolderWebVO;
import com.hustcad.plm.pdm.partbom.dto.partimport.PartImportLogVO;
import com.ty.basic.entity.cad.CADDocDO;
import com.ty.basic.entity.doc.DocDO;
import com.ty.basic.entity.org.UserDO;
import com.ty.basic.entity.part.PartDO;
import com.ty.queue.dto.QueueSendDTO;
import org.dom4j.Document;
import org.springframework.web.multipart.MultipartFile;

import java.math.BigInteger;
import java.util.List;
import java.util.Map;


/**
 * @author bj
 * @date 2021/10/19 9:16
 */
public interface DataTransAdapter {




    /**
     * 修订
     *
     * @param oid:
     * @param otype:
     * @param subfolderOid:
     * @author : bj
     * @date : 2021/10/19 14:39
     * @return: com.ty.pdm.common.vo.BusinessObjectVO
     */
    BusinessObjectVO newVersion(String oid, String otype, String subfolderOid);

    /**
     * 获取最新的文档
     *
     * @param docNumber:
     * @author : zky
     * @date : 2021/11/1 14:09
     * @return: com.ty.basic.entity.doc.DocDO
     */
    DocDO queryLastDocByNumber(String docNumber);

    /**
     * 通过oid获取文档
     *
     * @param oid:
     * @author : zky
     * @date : 2021/11/1 14:09
     * @return: com.ty.pdm.business.document.vo.DocVo
     */
    DocumentVO queryDocByOid(BigInteger oid);

    /**
     * 新增文档
     *
     * @param saveDocDto:
     * @author : zky
     * @date : 2021/11/1 14:10
     * @return: com.ty.pdm.business.document.vo.DocVo
     */
    void insertDoc(SaveDocDTO saveDocDto);

    /**
     * 根据文件夹路径获取文件夹
     *
     * @param defaultCabinetOid:
     * @param defaultCabinetOtype:
     * @param folderPath:
     * @author : bj
     * @date : 2023/2/14 16:03
     * @return: com.hustcad.plm.pdm.folder.model.vo.SubfolderWebVO
     */
    SubfolderWebVO getSubfolder(String defaultCabinetOid, String defaultCabinetOtype, String folderPath);

    /**
     * 检出
     *
     * @param oid:
     * @param otype:
     * @author : zky
     * @date : 2021/11/1 14:10
     * @return: com.ty.pdm.common.vo.BusinessObjectVO
     */
    BusinessObjectVO checkOut(String oid, String otype);

    /**
     * 检入
     *
     * @param oid:
     * @param otype:
     * @author : zky
     * @date : 2021/11/1 14:10
     * @return: com.ty.pdm.common.vo.BusinessObjectVO
     */
    BusinessObjectVO checkIn(String oid, String otype);

    /**
     * 删除历史文档附件
     *
     * @param oid:
     * @param otype:
     * @author : zky
     * @date : 2021/11/1 14:10
     * @return: void
     */
    void deleteOldFile(BigInteger oid, String otype);

    /**
     * 上传文档附件
     *
     * @param fileGroupDto:
     * @param objOtype:
     * @author : zky
     * @date : 2021/11/1 14:08
     * @return: java.util.List<com.ty.filevaultapi.vo.ContentUploadVO>
     */
    List<ContentUploadDTO> uploadDocFile(FileGroupDTO fileGroupDto, String objOtype);

    /**
     * 上传零部件附件
     *
     * @param files:
     * @param part:
     * @author : bj
     * @date : 2021/10/23 10:51
     * @return: void
     */
    void uploadPartFile(List<MultipartFile> files, PartDO part);

    /**
     * 获取雪花id
     *
     * @author : zky
     * @date : 2021/11/2 11:21
     * @return: java.math.BigInteger
     */
    BigInteger getNextId();

    /**
     * 根据标准化xml生成CAD文档
     *
     * @param standXml:
     * @author : bj
     * @date : 2021/10/24 17:27
     * @return: com.ty.mda.handler.response.ResponseResult
     */
    Map<String, Object> importCadDocAndPart(Document standXml);

    /**
     * 通过对象oid和otype
     *
     * @param objOid:
     * @param objOtype:
     * @author : bj
     * @date : 2021/11/4 16:30
     * @return: void
     */
    void deleteFileByObjOidAndObjType(BigInteger objOid, String objOtype);

    /**
     * 轻量化CAD文档
     *
     * @param topDocIdMap:
     * @param fileOidMap:
     * @param cadOidRelFileName:
     * @author : bj
     * @date : 2022/1/13 14:42
     * @return: java.util.List<com.ty.queue.dto.QueueSendDTO>
     */
    List<QueueSendDTO> generateLightWeightFile(Map<String, List<String>> topDocIdMap, Map<String, String> fileOidMap, Map<String, String> cadOidRelFileName);

    /**
     * 上传CAD文档附件到S3
     *
     * @param cadDocList:
     * @param docNameRelMultipartFile:
     * @param cadIdRelFileName:
     * @param fileOidMap:
     * @author : bj
     * @date : 2022/1/7 17:09
     * @return: void
     */
    void uploadCadFile(List<MDAImportOutDocVo> cadDocList, Map<String, MultipartFile> docNameRelMultipartFile, Map<String, String> cadIdRelFileName, Map<String, String> fileOidMap);

    /**
     * 判断CAD文档是否已经存在 true:存在
     *
     * @param fileName:
     * @author : bj
     * @date : 2021/11/2 10:23
     * @return: boolean
     */
    boolean verifyCadDocName(String fileName);

    /**
     * 获取产品库默认文件夹的工作区id
     *
     * @param product:
     * @param folderPath:
     * @author : bj
     * @date : 2021/11/25 16:56
     * @return: java.lang.String
     */
    String getWorkSpaceId(Product product, String folderPath);

    /**
     * 获取产品库默认文件夹的工作区id
     *
     * @param product:
     * @param folderPath:
     * @param userDO:
     * @author : bj
     * @date : 2023/04/11 15:00
     * @return: java.lang.String
     */
    String getWorkSpaceIdByDoc(Product product, String folderPath, UserDO userDO);

    /**
     * 获取生命周期模板id（默认basic）
     *
     * @author : bj
     * @date : 2021/11/2 11:42
     * @return: java.lang.String
     */
    String queryLifecycle();

    /**
     * 通过名称检出CAD文档
     *
     * @param name:
     * @param product:
     * @param workSpaceId:
     * @author : bj
     * @date : 2022/2/23 11:09
     */
    void checkOutCadDocByName(String name, Product product, String workSpaceId);

    /**
     * 通过软类型名称获取类型id
     *
     * @param name:
     * @author : bj
     * @date : 2021/11/4 16:02
     * @return: java.lang.String
     */
    String getTypeOidByName(String name);

    /**
     * 给二维CAD文档上传预览文件
     *
     * @param cadOidRelFileName:
     * @param docNameRelPdfFile:
     * @author : bj
     * @date : 2023/04/11 15:00
     * @return: void
     */
    void uploadDwgLightFile(Map<String, String> cadOidRelFileName, Map<String, MultipartFile> docNameRelPdfFile);

    /**
     * 导入零部件及零部件结构
     *
     * @param standXml 标准导入XML
     * @return 日志信息
     */
    Map<String, List<PartImportLogVO>> importPartAndBom(Document standXml);

    /**
     * 根据编号查询最新CADDOC
     */
    CADDocDO getLastCadDocByNumber(String number);
}
